﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using RESTVeterinariaServices.Dominio;
using RESTVeterinariaServices.Persistencia;
using System.Data.SqlClient;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Net;

namespace RESTVeterinariaServices
{
    public class PacienteService : IPacienteService
    {
        private PacienteDAO dao = new PacienteDAO();

        public Paciente CrearPaciente(Paciente PacienteACrear)
        {
            int existe = 0;
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                string query = "SELECT COUNT(*) FROM Paciente WHERE txtPaciente = @txtPaciente and idCliente=@idCliente";
                using (SqlCommand valida = new SqlCommand(query, con))
                {
                    valida.Parameters.Add(new SqlParameter("@txtPaciente", PacienteACrear.txtPaciente));
                    valida.Parameters.Add(new SqlParameter("@idCliente", PacienteACrear.Cliente.idCliente));
                    existe = (int)valida.ExecuteScalar();
                }
            }
            if (existe > 0)
            {
                throw new WebFaultException<MensajeRetornoWS>(
                    new MensajeRetornoWS()
                    {
                        IsValid = false,
                        txtMensaje = "El nombre del Paciente ya existe, por favor ingresar uno distinto",
                        PkReference = 0
                    },
                        HttpStatusCode.InternalServerError);
            }
            return dao.Crear(PacienteACrear);
        }

        public Paciente ObtenerPaciente(string IdCliente, string IdPaciente)
        {
            return dao.obtener(IdCliente, IdPaciente);
        }

        public List<Paciente> ListarTodos()
        {
            return dao.ListarTodos();
        }

        public Paciente ModificarPaciente(Paciente PacienteAModificar)
        {
            int existe = 0;
            using (SqlConnection con = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                con.Open();
                string query = "SELECT COUNT(*) FROM dbo.Paciente WHERE txtPaciente=@txtPaciente AND idCliente=@idCliente and IdPaciente<>@IdPaciente";
                using (SqlCommand valida = new SqlCommand(query, con))
                {
                    valida.Parameters.Add(new SqlParameter("@txtPaciente", PacienteAModificar.txtPaciente));
                    valida.Parameters.Add(new SqlParameter("@IdPaciente", PacienteAModificar.IdPaciente));
                    valida.Parameters.Add(new SqlParameter("@idCliente", PacienteAModificar.Cliente.idCliente));
                    existe = (int)valida.ExecuteScalar();
                }
            }
            if (existe > 0)
            {
                throw new WebFaultException<MensajeRetornoWS>(
                    new MensajeRetornoWS()
                    {
                        IsValid = false,
                        txtMensaje = "El nombre del Paciente ya existe para este cliente, por favor ingresar uno distinto",
                        PkReference = 0
                    },
                        HttpStatusCode.InternalServerError);
            }
            return dao.Modificar(PacienteAModificar);
        }

        public void EliminarPaciente(string IdPaciente)
        {

        }

        public List<Paciente> ObtenerPacientesXCliente(string IdCliente)
        {
            return dao.ObtenerXCliente(IdCliente);
        }

    }
}
